题目描述有2N张牌,它们的点数分别为1到2N。Alice拿了其中的N张,Bob拿了剩下的N张. Alice和Bob会进行N轮游戏,在每轮游戏中,Alice 和Bob 各出一张牌。出了的牌不能收回。在前N/2轮中,每轮谁的牌点数大谁就赢;在后N/2轮中,每轮谁的牌点数小谁就赢。已知Bob 每一轮会出什么牌,试求Alice 最多能赢多少轮。
输入第一行是一个整数N,接下来N行,每行一个整数,表示Bob这轮会出什么。2<=N <= 50000,保证N是偶数
输出输出Alice最多能赢几轮
样例输入1234541843
样例输出12
题解12345678910111213141516171819202122232425262728293031323334353637#include <cstdio>#include <algorithm>using namespace std;int n;int a[50010];int b[50010];bool vis[100010];int ans;bool cmp(c...
题目描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。
输入第一行m表示有m组测试数据每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。
输出输出所用装置的个数
样例输入12345252 3.2 4 4.5 6 101 2 3 1 2 1.2 3 1.1 1 2
样例输出1225
题解12345678910111213141516171819202122232425#include<iostream>#include<algorithm>#include <cmath>using namespace std;int main() { int m; cin >> m; whi...
题目描述小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。小明决定把所有的果子合成一堆。 因为小明比较懒,为了省力气,小明开始想点子了:
每一次合并,小明可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。小明在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以小明在合并果子时要尽可能地节省体力。假定每个果子重量都为$1$,并且已知果子的种类数和每种果子的数目$a_i$,你的任务是设计出合并的次序方案,使小明耗费的体力最少,并输出这个最小的体力耗费值。
输入输入第一行是一个整数$n$ , $1 \le n \le 10^6$,表示果子的种类数。第二行包含$n$个整数,用空格分隔,第$i$个整数$a_i$ ,$1 \le a_i \le 2 \times 10^5$是第$i$种果子的数目。
输出 输出每组测试数据输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。
样例输入1231 2 9
样例输出11...
题目描述HH公司(huge-hard)最近计划出品一个字处理软件。软件基本功能已经完成,但还缺少一个单词统计的功能,你的任务就是为该公司写一段程序,完成统计功能。
需要统计的信息有两项:出现单词的个数和单个单词出现的次数。
输入输入为一行字符串,即要统计的文本。
输出输出由若干行组成,第一行是一个整数,表示单词的个数,从第二行开始,每行由字符串、冒号、整数组成,其中字符串是一个出现在文本中的单词,整数则是该单词在文本中出现的次数。
样例输入1to know everything is to know nothing
样例输出1234567everything:1is:1know:2nothing:1to:2
题解C++123456789101112131415161718192021222324#include<bits/stdc++.h>using namespace std;string s[1000];string t;string k;int n,cnt;int main(){ n=0;while(cin>>t)s[n++]...
题目描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。元素个数不超过100,b在1至100之间。
输入第一行为数组元素个数和整数b 第二行为数组各个元素
输出按照要求输出
样例输入127 277 11 66 22 44 33 55
样例输出111 33 55 M
题解1234567891011121314151617181920212223242526#include <iostream>#include <set>using namespace std;int main() { int n,x,b; cin>>n>>b; set<int> a; char ch; for(int i=0;i<n;++i){ cin>>x; a.insert(x); } for(auto it=a.beg...
题目描述DJ非常痴迷于数据结构,二叉树是他最喜欢的结构模型。这种每个顶点的度不大于2的简单的图总是能激发他的灵感。然而,二叉树的表示方法是一个困扰他已久的问题。如果用链表表示,不直观;画成图形,计算机又难以存储。好在他现在发现了一种既直观,计算机又便于存储的表示方法。该方法定义如下:
1、如果二叉树中节点X是叶子节点,则该节点直接表示为X。2、如果二叉树中节点X有左子树,则该节点表示为(…)X,括号内为X的左子树。3、如果二叉树中节点X有右子树,则该节点表示为X(…),括号内为X的右子树。4、如果二叉树中节点X有左右子树,则该节点表示为(…)X(…),左边括号内为左子树,右边括号内为右子树。
现在DJ有许多二叉树的先序序列和中序序列,DJ要你写个程序帮他把这些二叉树转换为上述表示方法。
输入输入第一行为一个整数N,表示有N个待转换的二叉树。
接下来有N行,每行由两个字符串组成,中间用空格分开。每行的第一个字符串为二叉树的先序序列,第二个字符串为二叉树的中序序列。输入字符串由大写字母组成,每个字母代表二叉树的一个节点,不会有两个相同的字母。你可以假设不会输入无效数据。
输出每组数据...
题目描述我们知道二叉树的先序序列和中序序列或者是中序和后序能够唯一确定一颗二叉树。现在给一颗二叉树的先序序列和中序序列,要求输出它的后序序列。
输入多组测试数据,每组测试数据格式如下:第一行为先序序列第二行为中序序列
输出 输出该二叉树的后序序列。
样例输入12ABFCDGHEIBFAGDHCIE
样例输出1FBGHDIECA
题解12345678910111213141516171819202122232425262728293031323334353637383940#include <iostream>#include <algorithm>#include <cstring>using namespace std;typedef char ElemType;typedef struct node { ElemType data; struct node *lchild; struct node *rchild;} BTNode;void PostOrder(BTNode *b) ...
题目描述设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。 $n[2,100]$,$m[1,n]$
输入输入多行,每行2个数,分别表示n和m.
输出计算每一行中最后剩下这个人的编号.
样例输入110 3
样例输出14
题解1234567891011121314151617181920#include <iostream>#include <queue>using namespace std;int main() { int n, m; while(cin >> n >> m){ queue<int> a; for (int i = 1; i <= n; ++i) { a.push(i); } while (a.size() != 1) { for (int ii = 1; ii...
题目描述先说明一下什么是中缀式:
如2+(3+4)*5这种我们最常见的式子就是中缀式。
而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))
然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )
把括号去掉就是:+ 2 * + 3 4 5
最后这个式子就是该表达式的前缀表示。又叫做波兰式
给你一个前缀表达式,请你计算出该前缀式的值。
比如:
+ 2 * + 3 4 5的值就是 37
输入输入有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。以EOF为输入结束的标志。
输出输出对每组数据,输出该前缀表达式的值。输出结果保留两位小数。
样例输入1+ 2 * + 3 4 5
样例输出137.00
题解12345678910111213141516171819202122232425262728293031323334#include <sstream>#include "iostream&q...
题目描述在编程当中我们只会用到三种括号:圆括号(),方括号[]和花括号{},编译器在编译的时候会检查括号是否正确匹配。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]则是不合法的匹配。请编写一个程序来判断输入的括号序列是否合法。
输入测试数据由多组,每组数据有一行,为( ) [ ] { }组成的序列,长度不超过1000
输出对于每组数据输出一行,如果是合法匹配则输出YES,不合法则输出NO,请注意大小写
样例输入1{([()]{})}
样例输出1YES
题解12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include <iostream>#include <cstring>using namespace std;int main(){ char s[1010],ch[1010]; label: while (cin >> ch) ...